package com.example.seed.config;

import org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;

/**
 * Tomcat 配置
 */
@Configuration
public class TomcatConfiguration {

    /**
     * 创建一个自定义的Tomcat协议处理器定制器，用于配置虚拟线程执行器。
     *
     * @return TomcatProtocolHandlerCustomizer<?> 对象，用于定制Tomcat协议处理器。
     */
    @Bean
    public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() {

        // 返回一个定制器，该定制器将为每个任务创建一个新的虚拟线程
        return protocolHandler -> {
            // 配置虚拟线程的构建器，设置线程名称格式为"virtualthread#"，并指定线程池大小为1
            Thread.Builder.OfVirtual ofVirtual = Thread.ofVirtual().name("virtualthread#", 1);
            // 从虚拟线程构建器获取线程工厂
            ThreadFactory factory = ofVirtual.factory();
            // 将协议处理器的执行器设置为基于上述线程工厂的新线程池
            protocolHandler.setExecutor(Executors.newThreadPerTaskExecutor(factory));
        };
    }

}